///******************** NG.Respate(C)  **********************************
//* 产品名称: Respate 科技
//* 文件名称: mutex.c
//* 程序作者: 雷帕特公司(南宫子萍)
//* 程序版本: V1.1														   
//* 编制日期: 2019/1/29
//* 功能描述: 系统日志
//* QQ:	2085827949
//**********************************************************************/

//#include "lap_lib.h"


// 互斥锁程序测试


#if 0	//功能测试
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>



char buff[100]={0};

 pthread_mutex_t mutex;


 void fun(int a)
{
	sleep(2);	//等待主线程先运行
	
	//子线程上锁(等待主线程解锁)
	pthread_mutex_lock(&mutex);

	printf("son thread locked!\n");
	
}


pthread_t th = -1;
/*********************************************************************************
** 函数名称: lap_treads
** 功能描述: 
** 输入参数:         
** 输出参数: None.
** 返回参数: return .
**********************************************************************************/
void lap_tread(void)
{
	int ret = -1;
	
	ret = pthread_create(&th,NULL,fun,NULL);
	if(ret != 0)
	{
		printf("pthread_create Err!\n");
		return;
	}
}



int main(void)
{

	int ret = -1;
	//创建子线程
	lap_tread();

	//初始化互斥锁
	ret = pthread_mutex_init(&mutex,NULL);
	if(ret !=0)
	{
		printf("pthread_mutex_init Err!\n");
		return -1;
	}

	//上锁
	pthread_mutex_lock(&mutex);
	printf("输入'unlock' 解锁子线程\n");
	
	while(1)
	{
		scanf("%s",buff);
		if(!strncmp(buff,"unlock",8))
		{
			//解锁子进程
			pthread_mutex_unlock(&mutex);
			sleep(1);
			break;
		}
		printf("输入字符：%s\n",buff);
		memset(buff,0,sizeof(buff));
	}

	//等待子进程上锁
	pthread_mutex_unlock(&mutex);
	printf("main thread unlock!\n");
	
	//回收子线程
	pthread_join(th,NULL);
	return 0;
}
#endif







																						 
